/**
 * 用户信息，包含头部信息展示与退出管理
 */
import $ from 'jquery'
import util from '@yunke/core/util'

let promise = null;

const AuthorizeController = {
    init() {
        this._userInfo = null;
        this.bind();
        this._updateUserInfo();
    },
    bind() {
        //隐藏修改密码
        $("#js_change_pwd").hide();
        $('#js_logout').on('click', $.proxy(this.logout, this));

        // 显示顶部下拉弹层
        let $menu;
        $("#js_system, #js_userinfo").on("click", function (e) {
            $menu = $(this).next();
            $menu.show();
            e.stopPropagation();
        });
        //点击桌面隐藏弹层
        $(window.document).click(function () {
            if ($menu) {
                $menu.hide();
                $menu = null;
            }
        });
    },
    /**
     * 退出登录，并跳转登录页面
     */
    logout() {
        util.myAjax({
            url: window.G_CONFIG.api_prefix + "site/logout",
            type: "get",
            dataType: "json",
            complete() {
                util.goToLoginPage('');
            }
        })
    },
    /**
     * 获取用户信息
     * @returns {{userName:string}}
     */
    getUserInfo() {
        return this._userInfo;
    },
    /**
     * 获取用户信息
     * @returns {Promise}
     */
    getUserInfoPromise() {
        if (promise) {
            return promise;
        } else {
            return new Promise((resovle, reject) => {
                resovle(this._userInfo);
            });
        }
    },
    _flushView() {
        $('#js_user_name').text(this._userInfo.userName);
    },
    /**
     * 获取用户信息
     */
    _updateUserInfo() {
        var self = this;
        promise = util.myAjax({
            url: G_CONFIG.api_prefix + "site/login-data",
            type: "get",
            dataType: "json",
            data: {
                NEED_TOKEN: false
            },
            error: function () {
                util.goToLoginPage();
            },
            complete: function () {
                promise = null;
            }
        })
            .then(function (res) {
                if (res.data && res.data.orgLogo) {
                    res.data.orgLogo = res.data.orgLogo.replace(/^http:/, '');
                }

                if (res['retCode'] == 0) {
                    var data = res['data'];

                    if (data['isGuest'] === false) {
                        self._userInfo = data;

                        self._flushView();
                    } else {
                        util.goToLoginPage();
                    }
                } else {
                    util.goToLoginPage();
                }
                return self._userInfo;
            })
    }
};

AuthorizeController.init();

module.exports = AuthorizeController